package cn.wolfcode.trip.admin.controller;

import cn.wolfcode.trip.base.domain.Region;
import cn.wolfcode.trip.base.service.IRegionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author by mycp
 * @Classname RegionController
 * @Description TODO
 * @Date 2018/11/2 16:25
 */
@Controller
@RequestMapping("/region")
public class RegionController {
    @Autowired
    private IRegionService regionService;

    @RequestMapping("/list")
    public String list(){
        return "region/list";
    }

    /**
     * 思路: 根据有无父节点查询, 如果无父节点, 说明是顶层的区域, 如果有父节点, 则说明是查询的是父区域下的子区域
     *
     * 这里传入的另一个参数type, 用于是以treeview形式的格式返回 / 以普通的list数据返回
     */
    @RequestMapping("/listMenus")
    @ResponseBody
    public Object listMenus(Long parentId, String type){
        List<Region> list = regionService.listMenus(parentId);
        // 定义请求数据类型
        String typeDate = "treeView";
        if (typeDate.equals(type)){
            // 创建一个list用于存放每一个已经转换成标准treeView数据格式的region--map形式
            List<Map> treeViews = new ArrayList<>();
            // 遍历list, 将list中的每一个region封装成一个map, 符合treeView插件的数据格式
            for (Region region : list) {
                treeViews.add(region.toTreeViews());
            }
            return treeViews;
        }
        return list;
    }

    /**
     * 新增或更新区域
     * @param region
     * @return
     */
    @RequestMapping("/saveOrUpdate")
    public String saveOrUpdate(Region region){
        if (region.getId() == null){
            // 新增
            regionService.save(region);
        } else {
            // 编辑
            regionService.update(region);
        }
        // 重定向回到list
        return "redirect:/region/list.do";
    }

}
